package com.af.system.util;

import java.lang.reflect.Array;
import java.math.BigDecimal;
import java.nio.charset.Charset;
import java.time.ZoneId;
import java.util.*;

/**
 * @author : zhenyun.su
 * @comment : Integer, Long, BigDemcial 等数字类型工具类
 * @since : 2022/10/20
 */

public abstract class AfNumberUtils {

    /*
     * @comment : 从Object, String, long, Integer 获取Integer值； 若为空，则取默认值defaultValue
     */
    public static Integer intValue(Object o, Integer defaultValue){
        return o == null? defaultValue: (Integer) o;
    }
    public static Integer intValue(String o, Integer defaultValue){
        return o == null? defaultValue: Integer.valueOf(o);
    }
    public static Integer intValue(Integer o, Integer defaultValue){
        return o == null? defaultValue: o;
    }
    // Long值转换为Integer，注意值的大小不要越界
    public static Integer intValue(Long o, Integer defaultValue){
        return o == null? defaultValue: o.intValue();
    }

    /*
     * @comment : 从Object, String, Long, Integer 获取Long值； 若为空，则取默认值defaultValue
     */
    public static Long longValue(Object o, Long defaultValue){
        return o == null? defaultValue: (Long) o;
    }
    public static Long longValue(String o, Long defaultValue){
        return o == null? defaultValue: Long.valueOf(o);
    }
    public static Long longValue(Long o, Long defaultValue){
        return o == null? defaultValue: o;
    }
    public static Long longValue(Integer o, Long defaultValue){
        return o == null? defaultValue: o;
    }

    /*
     * @comment : 从Object, String, Long, Integer 获取Long值； 若为空，则取默认值defaultValue
     */
    public static BigDecimal bigDecimalValue(Object o, double defaultValue){
        if (o == null){
            return new BigDecimal(defaultValue);
        }else{
            return new BigDecimal(o.toString());
        }
    }
    public static BigDecimal bigDecimalValue(String o, double defaultValue){
        if (o == null){
            return new BigDecimal(defaultValue);
        }else{
            return new BigDecimal(o);
        }
    }

    public static BigDecimal bigDecimalValue(Double o, double defaultValue){
        if (o == null){
            return new BigDecimal(defaultValue);
        }else{
            return new BigDecimal(o);
        }
    }

    public static BigDecimal bigDecimalValue(Long o, double defaultValue){
        if (o == null){
            return new BigDecimal(defaultValue);
        }else{
            return new BigDecimal(o);
        }
    }
    public static BigDecimal bigDecimalValue(BigDecimal o, double defaultValue){
        if (o == null){
            return new BigDecimal(defaultValue);
        }else{
            return o;
        }
    }

    public static void main(String[] args) {
        Object io = Integer.valueOf(1);
        System.out.println(intValue(io, 9));
        System.out.println(intValue("1", 9));
        System.out.println(intValue(1L, 9));
        System.out.println(intValue(1, 9));

        Object o = Long.valueOf(2);
        System.out.println(longValue(o, 9L));
        System.out.println(longValue("2", 9L));
        System.out.println(longValue(2L, 9L));
        System.out.println(longValue(2, 9L));

        System.out.println(bigDecimalValue("2.3456", 9L));
        System.out.println(bigDecimalValue(2.3456d, 9L));
        System.out.println(bigDecimalValue(2L, 9L));
        System.out.println(bigDecimalValue(new BigDecimal(2.3456d), 9L));

    }
}
